<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <h3>变量和函数声明都移动到当前作用域的顶部，叫做提升(hoisting)</h3>
    <h4>也就是你可以先调用函数 再写函数内容</h4>
    <h4>但是你不能在使用变量后再初始化变量</h4>
    <h4>下面是先使用再初始化：</h4>
    <p id="r1" style="color: red;"></p>
    <h3>但是如果先赋值 再调用 再声明是可以的(不写var貌似也可以)：</h3>
    <P id="r2" style="color: red;"></P>
    <h4>总之就是这样 先使用后初始化是空的 先赋值后声明也可以用 </h4>
    <h4>提升是js的未知或被忽略的行为，程序可能包含错误，为避免错误，始终在每个作用域开头声明所有变量</h4>
    <h4 style="color: blueviolet;">如果未声明变量，则严格模式下的JavaScript不允许使用变量。</h4>
    <script>
        document.getElementById("r1").innerHTML = num;
        var num;
        num = 50;

        n = 77;
        document.getElementById("r2").innerHTML = n;
    </script>
</body>

</html>